package locations.actions;

import java.util.Collection;

import locations.dao.implement.PacientDAOHibernateJPA;
import locations.dao.implement.PracticaDAOHibernateJPA;
import locations.dao.implement.PracticeTypeDAOHibernateJPA;
import locations.dao.implement.ProfesionalDAOHibernateJPA;
import locations.model.Pacient;
import locations.model.Practica;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import locations.dao.implement.ProblematicTypeDAOHibernateJPA;

public class SavePracticaAction extends ActionSupport implements
		ModelDriven<Practica> {

	private static final long serialVersionUID = 1L;
	private String trabajadorSocialId;
	private Long pacientId;
	private Practica practica = new Practica();
	private Collection<Long> codigosPracticas;
	private Collection<Long> codigosTipoProblematicas;

	public String execute() {
		PacientDAOHibernateJPA pacienteDao = new PacientDAOHibernateJPA();
		Pacient paciente = pacienteDao.retrieveById(this.getPacientId());
		this.practica.setValido(true);

		if (this.getPractica().getId() == null) {
			paciente.addPractica(practica);
		}
		// this.practica.setPaciente(paciente);

		ProfesionalDAOHibernateJPA daoP = new ProfesionalDAOHibernateJPA();
		this.getPractica()
				.setProfesional(
						daoP.retrieveById(Long.parseLong(this
								.getTrabajadorSocialId())));
		// agrega los tipos de practicas
		if (this.getCodigosPracticas() != null) {
			this.getPractica().getTipoPracticas().clear();
			PracticeTypeDAOHibernateJPA ptd = new PracticeTypeDAOHibernateJPA();
			for (Long each : getCodigosPracticas()) {
				this.getPractica().agregarTipoPractica(ptd.retrieveById(each));
			}
		}

		// agrega los tipos de problematicas
		if (this.getCodigosTipoProblematicas() != null) {
			this.getPractica().getTipoProblematicas().clear();
			ProblematicTypeDAOHibernateJPA prT = new ProblematicTypeDAOHibernateJPA();
			for (Long each : this.getCodigosTipoProblematicas()) {
				this.getPractica().agregarTipoProblematica(
						prT.retrieveById(each));
			}
		}

		PracticaDAOHibernateJPA practiceDao = new PracticaDAOHibernateJPA();
		practiceDao.save(practica);

		return SUCCESS;
	}

	@Override
	public Practica getModel() {
		return this.getPractica();
	}

	public String getTrabajadorSocialId() {
		return trabajadorSocialId;
	}

	public void setTrabajadorSocialId(String trabajadorSocialId) {
		this.trabajadorSocialId = trabajadorSocialId;
	}

	public Practica getPractica() {
		return practica;
	}

	public void setPractica(Practica practica) {
		this.practica = practica;
	}

	public Long getPacientId() {
		return pacientId;
	}

	public void setPacientId(Long pacientId) {
		this.pacientId = pacientId;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public Collection<Long> getCodigosPracticas() {
		return codigosPracticas;
	}

	public void setCodigosPracticas(Collection<Long> codigosPracticas) {
		this.codigosPracticas = codigosPracticas;
	}

	public Collection<Long> getCodigosTipoProblematicas() {
		return codigosTipoProblematicas;
	}

	public void setCodigosTipoProblematicas(
			Collection<Long> codigosTipoProblematicas) {
		this.codigosTipoProblematicas = codigosTipoProblematicas;
	}

}
